package com.vlyman.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 类描述：
 *  接口传参校验-参数注解
 * @author chenjs
 * @date 2018/10/11 10:23
 **/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ValidateField {
    /**
     *  参数索引位置，默认为第一个参数
     */
    int index() default 0;

    /**
     *  如果参数是基本数据类型或String ，就不用指定该参数，
     *  如果参数是对象，要验证对象里面某个属性，就用该参数指定属性名，若校验多个参数用,(英文逗号)隔开
     */
    String fieldName() default "";

    /**
     *  正则验证
     */
    String regStr() default "";

    /**
     *  是否能为null，为true表示不能为null，false表示能够为null
     */
    boolean notNull() default false;

    /**
     *  是否能为空(空格，制表符均识别为空)，为true表示不能为空，false表示能够为空，用于验证String类型数据
     */
    boolean notBlank() default false;

    /**
     *  最小长度，用户验证字符串
     */
    int maxLen() default -1;

    /**
     *  最小长度
     */
    int minLen() default -1;

    /**
     *  最大值，用于验证数字类型数据
     */
    int maxVal() default 9999999;

    /**
     *  最小值，用于验证数值类型数据
     */
    int minVal() default -9999999;

    /**
     *  是否为必填项，true为必填项，false相反
     */
    boolean isRequire() default false;
}
